home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / procssng / alv.sun / alv.lha / src / ffill.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-08  |  1.8 KB  |  90 lines

  1. #include "defs.h"
  2.  
  3. ixrect        *pr;
  4. har           *progname;
  5. har            filename[BUFSIZ];
  6.  
  7. #ifdef STANDALONE
  8. ain(argc, argv, envp)
  9. #else
  10. fill_main(argc, argv, envp)
  11. #endif
  12.     int             argc;
  13.     char          **argv;
  14.     char          **envp;
  15. {
  16.     int             i;
  17.     FILE           *fp;
  18.     int             xpos, ypos;
  19.     int             boundary;
  20.     colormap_t        colormap;
  21.  
  22.     xpos = ypos = boundary = 0;
  23.     progname = strsave(argv[0]);
  24.     parse_profile(&argc, argv, envp);
  25.  
  26.     while ((gc = getopt(argc, argv, "x:y:b:")) != EOF)
  27.         switch (gc) {
  28.         case 'x':
  29.             xpos = atoi(optarg);
  30.             break;
  31.         case 'y':
  32.             ypos = atoi(optarg);
  33.             break;
  34.         case 'b':
  35.             boundary = atoi(optarg);
  36.             break;
  37.         case '?':
  38.             errflag++;
  39.             break;
  40.         }
  41.  
  42.     if (errflag)
  43.         error((char *) 0, "Usage: %s: [-b boundary] [-x xpos] [-y ypos] [infile] [outfile]\n", progname);
  44.  
  45.     for (stream = 0; optind < argc; stream++, optind++)
  46.         if (stream < 2 && strcmp(argv[optind], "-") != 0)
  47.             if (freopen(argv[optind], mode[stream], f[stream]) == NULL)
  48.                 error("%s %s", PR_IO_ERR_INFILE, argv[optind]);
  49.  
  50.     if ((pr = pr_load(stdin, &colormap)) == NULL)
  51.         error(PR_IO_ERR_RASREAD);
  52.  
  53.     ffill(xpos, ypos, boundary);
  54.  
  55.     pr_dump(pr, stdout, &colormap, RT_STANDARD, 0);
  56. }
  57.  
  58. fill(x, y, n)
  59. nt x,y,n;
  60. {
  61.     register int             i, j, k;
  62.  
  63.     if (x < 0 || x >= pr->pr_size.x || y < 0 || y >= pr->pr_size.y || pr_get(pr, x, y) == n)
  64.         return;
  65.  
  66.     pr_put(pr, x, y, n);
  67.  
  68.     for (i = x - 1; i >= 0; i--) /* to the left */
  69.         if (pr_get(pr, i, y) != n)
  70.             pr_put(pr, i, y, n);
  71.         else
  72.             break;
  73.     
  74.     for (j = x + 1; j < pr->pr_size.x; j++) /* to the right */
  75.         if (pr_get(pr, j, y) != n)
  76.             pr_put(pr, j, y, n);
  77.         else
  78.             break;
  79.  
  80.     for (k = i + 1; k < j; k++) {
  81.         if (y > 0 && pr_get(pr, k, y - 1) != n)
  82.             ffill(k, y - 1, n);
  83.         if (y < pr->pr_size.y - 1 && pr_get(pr, k, y + 1) != n)
  84.             ffill(k, y + 1, n);
  85.     }
  86. }
  87.  
  88.  
  89.  
  90.